// 导航守卫：允许和不允许路由的通过以及路由的引导
// 导入路由
import router from '@/router'
import store from '@/store'
import asyncRoutes from '@/router/asyncrouter'
// 处理一级路由权限数据
function getFirstRoutePerms(permsArr) {
    const newArr = permsArr.map(item => {
      return item.split(':')[0]
    })
    return [...new Set(newArr)]
  }
  
  // 处理二级路由权限数据
  function getSecondRoutePerms(permsArr) {
    const newArr = permsArr.map(item => {
      const arr = item.split(':')
      return `${arr[0]}:${arr[1]}`
    })
    return [...new Set(newArr)]
  }

  // 根据权限标识过滤路由表
function getRoutes(firstRoutePerms, secondRoutePerms, asyncR) {
    // 根据一级和二级对动态路由表做过滤 return出去过滤之后的路由表
    // 1. 根据一级路由对动态路由表做过滤
   
    if(firstRoutePerms.includes('*')){
        return asyncR
    }
    return asyncR.filter(route => {
      return firstRoutePerms.includes(route.permission)
    }).map(item => {
      // 2. 对二级路由做过滤
      return {
        ...item,
        children: item.children.filter(item => secondRoutePerms.includes(item.permission))
      }
    })
  }
// 定义白名单：
const witeList = ['/login', '/register', '/404']
    // 导航守卫
router.beforeEach(
    async (to, from, next) => {
        // to： 目标路由， 表示跳转到页面的路由
        // from:原路由
        // next:1、放行，2、引导跳转路由
        const token = store.state.user.token
        if (token) {
            if (to.path == '/login') {
                // 跳转到首页
                next('/')
                    // this.$router.push('/')
            } else {
                next() //next()没有参数代表路由放行
                            // 获取原始权限列表
                const permissions = await store.dispatch('menu/getProfile')
                 // 2. 把后端的权限数组格式化成我们自己的俩个权限数据
                console.log('当前的权限数据为:', permissions)
                const firstRoutePerms = getFirstRoutePerms(permissions)
                console.log(firstRoutePerms)
                const secondRoutePerms = getSecondRoutePerms(permissions)
                console.log(secondRoutePerms)
                const routerp=getRoutes(firstRoutePerms,secondRoutePerms,asyncRoutes)

                console.log(routerp)

                routerp.forEach(item => router.addRoute(item))

                store.commit('menu/setMenuList', routerp)
            }
        } else {
            if (witeList.includes(to.path)) {
                next()
            } else {
                next('/login')
            }
        }
    }
)